[NEW] Amazon IVSで遅延300ミリ秒未満で10,000人へのReal-Time Streamingができるようになりました!!
はじめに
清水です。本エントリでお届けするAWSアップデート情報はこちら!AWSのマネージド型ライブストリーミングソリューションであるAmazon Interactive Video Service (Amazon IVS)でホストから視聴者までの遅延が300ミリ秒未満で、最大10,000人の視聴者にライブストリーミングが可能なReal-Time Streaming機能が追加されました!(2023/08/07付でポストされたアップデート情報となります。)
- Amazon Interactive Video Service announces Real-Time Streaming
- New — Deliver Interactive Real-Time Live Streams with Amazon IVS | AWS News Blog
- 新機能 — Amazon IVS によるインタラクティブなリアルタイムライブストリーム配信 | Amazon Web Services ブログ
遅延300ミリ秒未満で最大10,000人にReal-Time Streamingができるようになった!
迅速かつ簡単にセットアップできるAWSのマネージドライブストリーミングソリューションとして2020年7月にリリースされたAmazon IVS、リリース当時からの特色の1つが低遅延なライブストリーミングができることでした。
- Introducing Amazon Interactive Video Service (Amazon IVS)
- Amazon Interactive Video Service – Add Live Video to Your Apps and Websites | AWS News Blog
実際にリリース時に(といっても2ヶ月ほど経ったころですが)遅延を確認したところ、おおよそ3秒未満の遅延でのライブストリーミングが可能でした。IVS Channelの作成とPlayer SDKの利用だけで、これほど簡単に低遅延ライブストリーミングができるのかと驚愕したものです。
そんなAmazon IVSのリリースからおよそ3年、様々なアップデートがありました。その中でも特徴的なものの1つが複数のホストからの映像を1つのライブストリーミングに統合できるMultiple Hosts機能ではないでしょうか。複数のストリーマー(配信者)の対話をライブストリーミングしたり、また視聴者をライブストリーミングに参加させるなど、そのリソース名「Stage」のとおり、参加者をステージに上げてインタラクティブな交流をしながらそれをライブストリーミングするということを実現可能にしました。
そんな魅力的なMultiple Hosts機能、Stage上ではリアルタイムなやり取りが可能ですが、Stage上への参加者はどうしても人数が制限されていました。Multiple Hosts機能リリース当時のStageへの参加者は12ホスト、その後subscribersについては1,000までは緩和されたという認識です。Stageに参加していない視聴者へのストリーミングはChannel経由で行う必要があり、3秒から5秒程度の遅延が発生してしまう状況でした。
しかし!今回のアップデートでこのStageへの参加者(subscribers)が10,000人まで緩和されました。10,000人の視聴者といえばなかなか大規模なライブストリーミングだと思います。実際、Amazon IVSリリース時の、低遅延(3秒から5秒の遅延)ライブストリーミングの同時視聴者数の上限は3,000人でした。(その後、15,000人まで上限は引き上げられていますね。[update] Amazon Interactive Video Service (Amazon IVS)のService Quotasで3つの制限のデフォルト値が引き上げられました! | DevelopersIO)またホストから視聴者への遅延については300ミリ秒未満であると明記されるようになりました。遅延300ミリ秒未満のリアルタイムストリーミングを最大10,000の視聴者に提供可能となります!機能名もMultiple HostsからReal-Time Streamingと装い新たになりました。
IVSのStreamingはReal-time StreamingとLow-latency Streamingに!
今回のアップデートにより、IVSのStreaming機能についても整理され、従来からの低遅延(3秒から5秒の遅延)ライブストリーミングをLow-latency Streaming、Stageを使った300ミリ秒のストリーミング(従来のMultiple Hosts機能)をReal-time Streamingと称するようになりました。
具体的に確認していきましょう。まずはマネジメントコンソールからです。Multiple Hosts機能のリリース時には以下のようにAmazon IVSのVideoカテゴリ内のStagesという位置付けでした。
[UPDATE] Amazon IVSの新機能Multiple Hostsについてユースケースや動作の仕組みを確認してみた | DevelopersIO
最新のAmazon IVSマネジメントコンソールを確認してみましょう。Low-latency StreamingとReal-time Streamingに分かれていますね。従来のVideoのStages以外がLow-latency Streamingになり、StagesはReal-time Streamingのカテゴリとなりました。
Amazon Interactive Video Service | ap-northeast-1
Amazon IVSのDocumentationページにも変化があります。こちらも従来まで、動画のストリーミング機能は「Amazon IVS」のカテゴリのみでした。そのあとにAmazon IVS Chatなどが続くぐあいですね。以下はInternet Archive Wayback Machineからの2023/05/21の段階のスクショです。
Amazon Interactive Video Service Documentation (Internet Archive Wayback Machine 2023/05/21)
最新のAmazon Interactive Video Service Documentationページを確認してみましょう。以下のようにAmazon IVS Low-Latency Streaming、Amazon IVS Real-Time Streamingと分かれ、そのあとにAmazon IVS Chatと続いています。
Amazon Interactive Video Service Documentation
詳細は後述しますが、Stagesの機能自体はMultiple Hostsリリース時から変わりません。しかしドキュメントなどのカテゴリ分けが変わっている点は抑えておきましょう。
Amazon IVSのReal-Time Streamingをやってみた!
Amazon IVSのReal-time Streamingについてアップデート内容が確認できたところで、実際にこのReal-time Streamingを機能を使って遅延300ミリ秒いないのストリーミングをやってみましょう。
といっても、機能の使い方としてはMultiple Hostsと変わりありません。IVS側ではStageというリソースを作成し、ホストまたは視聴者は参加者トークンを用いてステージに参加します。詳細は以下などをご参照ください。
このStageリソースを使ったReal-time Streaming、利用のためにはAmazon IVS Broadcast SDKが必要です。Multiple Hosts機能のリリース時はiOS、Androidのみに対応しており、個人的に動作検証ができませんでした。
しかし、いつの間にやらWeb Broadcast SDKでもこのStageの利用に対応していたので、今回はWeb Broadcast SDKを利用してStageを使ったReal-time Streamingを試してみたいと思います。ドキュメントからたどり、以下のページのSample codeを使用しました。
PCのWebブラウザ(今回はChromeブラウザを利用しました)でアクセスします。初回アクセス時、ドメインに対してカメラとマイクの許可が求められるので、[許可する]を選択しておきます。
Amazon IVSのStageリソースの作成
Sample codeのページを確認しつつ、まずはIVS側のStageリソースを作成します。AWSマネジメントコンソールでAmazon IVSのページに進み、Real-time StreamingのStagesを選択、[Create stage]ボタンから進みます。もしくはIVSのトップページのGet startedで"Amazon IVS Stage"を選択、[Get started]ボタンを押下します。(今回はこれでやってみました。)
「How Amazon IVS Real-Time works」の内容を確認しつつ、Setupの項目でStage nameを入力、[Create stage]ボタンを押下します。
Stageが作成できました。
ホストのStageへの参加
Stageが作成できたので、続いてホスト(音声とビデオをストリームする側)をStageに参加させます。Stageへの参加にはParticipant token(参加者トークン)が必要です。このトークンは本番使用用途でであればAWS SDKを用いて発行するべきものなのですが(マネジメントコンソールにも、その旨記載がありますね)、今回は動作検証が目的ですのでマネジメントコンソールから作成していきます。
Stageの詳細ページから、Participant tokensの項目、[Create a participant token]ボタンで進みます。
User IDを入力します。CapabilitiesについてはPUBLISH
とSUBSCRIBE
が設定可能です。ホスト側は音声とビデオの送受信を許可させたいので、PUBLISH
とSUBSCRIBE
の両方を選択します。(後述しますが、視聴者側はビデオの送信は不要としてSUBSCRIBE
を選択しました。)Token durationも適切な値を入力します。今回は60
としました。[Create a participant token]ボタンで参加者トークンを作成します。
トークンが作成できました。このトークンはリロードなど含めマネジメントコンソールの画面遷移があると消えて参照できなくなってしまいます。四角(□)のCopyボタンでTokenの内容をコピーしておきましょう。(こちらのエントリで確認している通り、なかなか長い文字列となっています。)
作成したトークンを、Sample codeのページのParticipant Tokenの欄に貼り付けます。そのまま[JOIN STAGE]ボタンを押下しましょう。ストリームしているビデオが確認できますね。(Sample codeの画面、左側と上部のスペースを最小化し、プレビュー画面を最大表示しています。)
視聴者のStageへの参加
ホストをStageに参加させ、ビデオと音声のストリームが開始できました。続いてこのストリームを視聴するユーザ側にもトークンを作成し、Stageに参加させます。
ホストと同様、マネジメントコンソールのStageの詳細ページ、Participant tokensの[Create a participant token]ボタンからトークンを作成します。CapabilitiesについてはSUBSCRIBE
のみを選択しました。このSUBSCRIBE
を設定したトークンを使用するユーザでは映像と音声のストリームはできませんが、視聴するのみではこちらで十分である認識です。(Distribute Participant Tokens - Amazon IVS)
視聴者ですが、ホストと同じPC内の別プロファイルのChromeブラウザでSample codeのページを開きました。またSelect Cameraの項目で、ホスト側とは別のカメラを選択しています。ホスト側はPCにUSB接続したWebカメラ(HD Pro WebCam C920)を使用していますが、参加者側はMacBook ProのFactTime HD Cameraというぐあいです。ホスト側の映像であるかどうかをわかりやすくするため、このようにしました。
視聴者用の参加者トークンをSample codeのページのParticipant Tokenの欄に貼り付け、[JOIN STAGE]ボタンを押下してみましょう。ホスト側の映像がストリームされていることがわかりますね!
視聴者へストリームされている映像の遅延を確認
Amazon IVSのReal-Time Streamingでホスト側からの映像が、視聴者側にストリームされていることが確認できました。さて、このReal-Time Streamingではホストから視聴者への遅延が300ミリ秒未満であると謳っています。この遅延についても実際に確認してみましょう。
秒以下(ミリ秒)の遅延を確認するため、iPhoneのストップウォッチを使いました。ホスト側でストリームする映像に使用している、MacにUSB接続しているWebカメラ(HD Pro WebCam C920)でこれを撮影します。ホスト側の画面と視聴者側の画面を同時に確認(写真撮影)して遅延を計測してみました。以下の通り、ホスト側の画面から視聴者の画面までは210ミリ秒ほどの遅延となりました、300秒未満の遅延となっていますね。
なお、ストップウォッチから視聴者側の画面までは320ミリ秒ほどの遅延となっており、300ミリ秒未満にはなっていません。ストップウォッチからホスト側の画面でも110ミリ秒ほどの遅延が発生していることから、WebカメラからPCへの接続部分での遅延などが影響しているのかな、と考えています。ホストと視聴者をPC端末レベルやネットワークレベルでわけてみたり、Web Broadcast SDKではなくiOSやAndroidのアプリからストリームもしくは視聴することでも結果が変わるかもしれませんね。
まとめ
Amazon IVSで新たに利用可能になったReal-Time Streaming機能について、その内容を確認しつつ、実際にWeb Broadcast SDKを使ったSample codeでストリーミングを行ってみました。ホストからストリームされる映像と、視聴者側の映像が300ミリ秒未満のレイテンシであることが確認できました、これが最大視聴者数10,000人にストリーミングできます!機能の使い方としては従来までのMultiple Hostsと同様で、IVS側でStagesリソースを作成、参加者用のトークンを発行するかたちです。ドキュメントなどはMultiple HostsからReal-Time Streamingと名称などが変更されています。また従来からの低遅延配信はLow-Latency Streamingと称すようになりました。Real-TimeとLow-Latecy、利用用途などに合わせて適切に使い分けていきましょう!